cmake_minimum_required(VERSION 3.3)
project(TTMCM)

option(CXX "enable C++ compilation" ON)
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
# add_definitions(-D_GLIBCXX_USE_CXX11_ABI=0)

if(CXX)
  set (CMAKE_CXX_STANDARD 17)
  enable_language(CXX)
endif()

list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR})

if(NOT CMAKE_BUILD_TYPE)
  set(CMAKE_BUILD_TYPE "Release")
endif()

message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
message(STATUS $ENV{GUROBI_HOME})

# Visual Studio compiler with static runtime libraries
if(MSVC AND MT)
  set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} /MT")
  set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
  set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT")
  set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd")
endif()

find_package(GUROBI REQUIRED)

include_directories(${GUROBI_INCLUDE_DIRS} ${PROJECT_SOURCE_DIR}/include nlohmann_json::nlohmann_json)

# list source files here
set(sources1 src/main.cpp
  src/temporaltree.cpp
  src/treejsonreader.cpp
  src/treeorder.cpp
  src/treeordercomputation.cpp
  src/treeordercomputationheuristic.cpp
  src/constraint.cpp
  src/treeordercomputationsa.cpp
  src/treeordercomputationsaconstraints.cpp
  src/treeordercomputationilp.cpp
  src/treeordercomputationiterative.cpp
  src/treewriter.cpp)
set(sources2 src/splitinstance.cpp
  src/temporaltree.cpp
  src/treejsonreader.cpp
  src/treeorder.cpp
  src/constraint.cpp
  src/treewriter.cpp)

add_subdirectory(nlohmann_json)

add_executable(${CMAKE_PROJECT_NAME} ${sources1})
add_executable(splitinstance ${sources2})

if(CXX)
  set(CMAKE_CXX_STANDARD 17)
  target_link_libraries(${CMAKE_PROJECT_NAME} optimized ${GUROBI_CXX_LIBRARY}
    debug ${GUROBI_CXX_DEBUG_LIBRARY})
endif()

target_link_libraries(${CMAKE_PROJECT_NAME} pthread)
target_link_libraries(${CMAKE_PROJECT_NAME} ${GUROBI_LIBRARY} nlohmann_json::nlohmann_json)

if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR})
  include(FeatureSummary)
  feature_summary(WHAT ALL)
endif()